package yu.zhu.todo.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import yu.zhu.todo.pojo.TodoDto;
import yu.zhu.todo.pojo.vo.TodoMongoVo;
import yu.zhu.todo.repository.MogonDBRepository;
import yu.zhu.todo.service.TodoService;
import yu.zhu.todo.utils.IdWorker;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

/**
 * @Author yuzhu
 * @Date 2020/11/10 22:51
 */
@Service
public class TodoServiceMongoDblImpl implements TodoService {
    @Autowired
    private MogonDBRepository todoRepository;
    @Autowired
    private IdWorker idWorker;

    @Override
    public TodoDto saveTodo(TodoDto todo) {
        String id = idWorker.nextId()+ "";
        todo.setId(id);
        todo.setCompleted(0);
        TodoMongoVo todoMongo= todoRepository.insert(TodoMongoVo.convertDao(todo));
        return TodoMongoVo.convtDao(todoMongo) ;
    }

    @Override
    public void deleteTodo(String id) {
        todoRepository.deleteById(id);
    }

    @Override
    public List<TodoDto> findAllTodo() {
        List<TodoMongoVo> voList = todoRepository.findAll();
        List<TodoDto> result = new ArrayList<>();
        for (TodoMongoVo todoMongoVo : voList) {
            TodoDto todoDto = TodoMongoVo.convtDao(todoMongoVo);
            result.add(todoDto);
        }
        return result ;
    }

    @Override
    public TodoDto updateTodo(TodoDto todo) {
        TodoMongoVo todoMongoVo = TodoMongoVo.convertDao(todo);
        TodoMongoVo mongoVo = todoRepository.save(todoMongoVo);
        return TodoMongoVo.convtDao(mongoVo);
    }

    @Override
    public TodoDto findByTodoId(String id) {
        Optional<TodoMongoVo> optional = todoRepository.findById(id);
        TodoDto todoDto = null ;
        if (optional.isPresent()){
            TodoMongoVo todoMongoVo = optional.get();
            todoDto=TodoMongoVo.convtDao(todoMongoVo);
        }
        return  todoDto;
    }

}
